package com.yida.gwj.report.service;

import com.yida.gwj.api.domain.GwjFinanceAccountDetail;
import com.yida.gwj.common.domain.GwjBaseHouse;
import com.yida.gwj.report.domain.GwjCalculateRateLog;
import com.yida.gwj.report.domain.GwjReportYearBenifit;
import com.yida.gwj.report.domain.dto.GwjCalculateRateDTO;
import com.yida.gwj.report.domain.request.GwjCalculateRateRequest;
import com.yida.gwj.report.domain.request.GwjReportYearBenifitRequest;
import com.yida.gwj.report.domain.request.GwjSettleRateRequest;

import java.time.LocalDate;
import java.util.List;

/**
 * @Author: PPV
 * @Date: 2023-03-08
 */
public interface IGwjCalculateRateService {

    /**
     * 新增年增值收益
     *
     * @param request
     * @return
     */
    int save(GwjReportYearBenifitRequest request);

    /**
     * 更新年增值收益
     *
     * @param request
     * @return
     */
    int update(GwjReportYearBenifitRequest request);


    /**
     * 批量删除年增值收益
     *
     * @param benefitIds
     * @return
     */
    int delBatch(Long[] benefitIds);

    /**
     * 年增值收益分页
     *
     * @param year
     * @param status
     * @return
     */
    List<GwjReportYearBenifit> getPage(String year, String status);

    /**
     * 年增值收益 确认不再修改
     *
     * @param benefitId
     * @return
     */
    int confirm(Long benefitId);

    /**
     * 计息展示
     *
     * @param request
     * @return
     */
    GwjCalculateRateDTO calculateRateShow(GwjCalculateRateRequest request);

    /**
     * 地区结息
     *
     * @param request
     * @return
     */
    GwjCalculateRateLog settleRate(GwjSettleRateRequest request);

    GwjCalculateRateLog calculateSingleCommunity(Long communityId, List<GwjBaseHouse> allHouses, LocalDate startTime, LocalDate endTime, String calculateFlag);

    GwjCalculateRateLog calculateSingleHouse(GwjBaseHouse house, List<GwjFinanceAccountDetail> details, LocalDate startTime, LocalDate endTime, String calculateFlag, Long communityId);


    void interest2Money(Long areaId, String calculateFlag);

    /**
     * 地区结息-新
     *
     * @param request 地区结息请求参数
     */
    void newSettleRate(GwjSettleRateRequest request);

    /**
     * 全地区结息-新
     *
     * @param request 地区结息请求参数
     */
    void newSettleRateAll(GwjSettleRateRequest request);
}
